1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package com.sun.media.sound;
26
27 import java.io.IOException;
28 import javax.sound.midi.Instrument;
29 import javax.sound.midi.MidiChannel;
30 import javax.sound.midi.Patch;
31 import javax.sound.midi.Soundbank;
32 import javax.sound.midi.SoundbankResource;
33 import javax.sound.midi.VoiceStatus;
34
35
36
37
38
39
40 public abstract class ModelAbstractOscillator
41 implements ModelOscillator, ModelOscillatorStream, Soundbank {
42
43 protected float pitch = 6000;
44 protected float samplerate;
45 protected MidiChannel channel;
46 protected VoiceStatus voice;
47 protected int noteNumber;
48 protected int velocity;
49 protected boolean on = false;
50
51 public void init() {
52 }
53
54 public void close() throws IOException {
55 }
56
57 public void noteOff(int velocity) {
58 on = false;
59 }
60
61 public void noteOn(MidiChannel channel, VoiceStatus voice, int noteNumber,
62 int velocity) {
63 this.channel = channel;
64 this.voice = voice;
65 this.noteNumber = noteNumber;
66 this.velocity = velocity;
67 on = true;
68 }
69
70 public int read(float[][] buffer, int offset, int len) throws IOException {
71 return -1;
72 }
73
74 public MidiChannel getChannel() {
75 return channel;
76 }
77
78 public VoiceStatus getVoice() {
79 return voice;
80 }
81
82 public int getNoteNumber() {
83 return noteNumber;
84 }
85
86 public int getVelocity() {
87 return velocity;
88 }
89
90 public boolean isOn() {
91 return on;
92 }
93
94 public void setPitch(float pitch) {
95 this.pitch = pitch;
96 }
97
98 public float getPitch() {
99 return pitch;
100 }
101
102 public void setSampleRate(float samplerate) {
103 this.samplerate = samplerate;
104 }
105
106 public float getSampleRate() {
107 return samplerate;
108 }
109
110 public float getAttenuation() {
111 return 0;
112 }
113
114 public int getChannels() {
115 return 1;
116 }
117
118 public String getName() {
119 return getClass().getName();
120 }
121
122 public Patch getPatch() {
123 return new Patch(0, 0);
124 }
125
126 public ModelOscillatorStream open(float samplerate) {
127 ModelAbstractOscillator oscs;
128 try {
129 oscs = this.getClass().newInstance();
130 } catch (InstantiationException e) {
131 throw new IllegalArgumentException(e);
132 } catch (IllegalAccessException e) {
133 throw new IllegalArgumentException(e);
134 }
135 oscs.setSampleRate(samplerate);
136 oscs.init();
137 return oscs;
138 }
139
140 public ModelPerformer getPerformer() {
141
142 ModelPerformer performer = new ModelPerformer();
143 performer.getOscillators().add(this);
144 return performer;
145
146 }
147
148 public ModelInstrument getInstrument() {
149
150 SimpleInstrument ins = new SimpleInstrument();
151 ins.setName(getName());
152 ins.add(getPerformer());
153 ins.setPatch(getPatch());
154 return ins;
155
156 }
157
158 public Soundbank getSoundBank() {
159
160 SimpleSoundbank sbk = new SimpleSoundbank();
161 sbk.addInstrument(getInstrument());
162 return sbk;
163 }
164
165 public String getDescription() {
166 return getName();
167 }
168
169 public Instrument getInstrument(Patch patch) {
170 Instrument ins = getInstrument();
171 Patch p = ins.getPatch();
172 if (p.getBank() != patch.getBank())
173 return null;
174 if (p.getProgram() != patch.getProgram())
175 return null;
176 if (p instanceof ModelPatch && patch instanceof ModelPatch) {
177 if (((ModelPatch)p).isPercussion()
178 != ((ModelPatch)patch).isPercussion()) {
179 return null;
180 }
181 }
182 return ins;
183 }
184
185 public Instrument[] getInstruments() {
186 return new Instrument[]{getInstrument()};
187 }
188
189 public SoundbankResource[] getResources() {
190 return new SoundbankResource[0];
191 }
192
193 public String getVendor() {
194 return null;
195 }
196
197 public String getVersion() {
198 return null;
199 }
200 }